Entity History এবং Audit Tracking হল ডেটাবেসের মধ্যে ডেটার পরিবর্তন এবং ইতিহাস ট্র্যাক করার প্রক্রিয়া। যখন ডেটা পরিবর্তিত হয়, তখন তার পূর্ববর্তী অবস্থা সংরক্ষণ করা এবং সংশোধন বা অপসারণের কারণ জানা গুরুত্বপূর্ণ হয়ে ওঠে, বিশেষ করে নিরাপত্তা, আইনগত কারণে এবং ডেটা বিশ্লেষণের জন্য। এই প্রক্রিয়াগুলি সাধারণত Audit Logs, Change Tracking, এবং Entity History ধারণার মাধ্যমে বাস্তবায়িত হয়।
Entity History
Entity History বা Entity Versioning হল একটি প্রক্রিয়া যার মাধ্যমে আপনি ডেটাবেসে বিভিন্ন অবজেক্টের ইতিহাস এবং তার পরিবর্তনের তথ্য সংরক্ষণ করেন। এটি কার্যকরী হয় যখন আপনাকে একটি নির্দিষ্ট অবজেক্টের পরিবর্তনের ইতিহাস জানতে হয়, যেমন কোন তথ্য কখন পরিবর্তিত হয়েছিল, এবং কে সেই পরিবর্তন করেছে।
Fluent NHibernate-এ Entity History কনফিগারেশন:
Fluent NHibernate ব্যবহার করে Entity History ট্র্যাক করার জন্য সাধারণত একটি Version কলাম বা Timestamp ব্যবহার করা হয়। এটি নিশ্চিত করে যে প্রতিটি রেকর্ডে একটি ভার্সন তথ্য থাকবে, যাতে পূর্ববর্তী রেকর্ডের সাথে তুলনা করা যায়।
public class Employee
{
public virtual int Id { get; set; }
public virtual string Name { get; set; }
public virtual decimal Salary { get; set; }
public virtual int Version { get; set; } // Versioning for history tracking
}
public class EmployeeMap : ClassMap<Employee>
{
public EmployeeMap()
{
Table("Employees");
Id(x => x.Id).GeneratedBy.Identity();
Map(x => x.Name).Length(100).Not.Nullable();
Map(x => x.Salary).Not.Nullable();
Version(x => x.Version); // This will track the version of the entity
}
}
এখানে:
- Version(x => x.Version): এটি Version কলাম যোগ করে যা প্রতিটি রেকর্ডের জন্য তার ভার্সন ট্র্যাক করে। যখনই রেকর্ড আপডেট হবে, ভার্সন নম্বর বাড়ানো হবে, এবং পূর্বের রেকর্ডটি অটোমেটিকভাবে অপরিবর্তিত থাকবে।
Audit Tracking Techniques
Audit Tracking হল সেই পদ্ধতি যার মাধ্যমে আপনি ডেটাবেসে সমস্ত পরিবর্তন এবং এর সাথে সম্পর্কিত মেটাডেটা (যেমন: কোন ব্যবহারকারী পরিবর্তন করেছে, কখন পরিবর্তন হয়েছে, কি পরিবর্তিত হয়েছে) ট্র্যাক করেন। এটি বিশেষভাবে গুরুত্বপূর্ণ যেখানে আপনি জানাতে চান কোন ডেটা কখন এবং কেন পরিবর্তিত হয়েছে।
Audit Tracking Implementation:
Audit tracking এর জন্য সাধারণত দুটি পদ্ধতি ব্যবহৃত হয়:
- Manual Audit: যেখানে প্রতিটি পরিবর্তন ট্র্যাক করতে ম্যানুয়ালি কাস্টম কোড লেখা হয়।
- Automatic Audit: যেখানে একটি স্বয়ংক্রিয় সিস্টেমের মাধ্যমে সমস্ত ডেটাবেস অপারেশন ট্র্যাক করা হয় (যেমন Hibernate Envers বা NHibernate Envers).
NHibernate Envers দিয়ে Audit Tracking
NHibernate Envers একটি লাইব্রেরি যা NHibernate এর মাধ্যমে সহজেই Audit Tracking করতে সাহায্য করে। এটি Entity History ট্র্যাক করার জন্য একটি শক্তিশালী টুল, যা ডেটাবেসে সংশোধন, ইনসার্ট, এবং ডিলিট অপারেশন এর ইতিহাস সংরক্ষণ করে।
NHibernate Envers Setup:
- NHibernate Envers প্যাকেজ ইন্সটল করা:
Install-Package NHibernate.Envers
- Audit Mapping কনফিগারেশন:
এখানে Audit ফিচার ব্যবহারের জন্য আপনাকে একটি @Audited অ্যানোটেশন ব্যবহার করতে হবে।
using NHibernate.Envers;
[Audited] // Enable auditing for this entity
public class Employee
{
public virtual int Id { get; set; }
public virtual string Name { get; set; }
public virtual decimal Salary { get; set; }
}
public class EmployeeMap : ClassMap<Employee>
{
public EmployeeMap()
{
Table("Employees");
Id(x => x.Id).GeneratedBy.Identity();
Map(x => x.Name).Length(100).Not.Nullable();
Map(x => x.Salary).Not.Nullable();
}
}
এখানে:
- [Audited]: এই অ্যানোটেশনটি Employee ক্লাসের জন্য audit tracking সক্রিয় করে।
- Audit Data Query:
এখন আপনি audit ডেটা সেগুলি দেখতে এবং ট্র্যাক করতে পারবেন। Envers ব্যবহার করে আপনি রেকর্ডের পুরানো ভার্সন দেখতে পারেন।
using NHibernate.Envers;
var auditReader = AuditReaderFactory.Get(session);
var employeeHistory = auditReader.CreateQuery()
.ForRevisionsOfEntity<Employee>(false)
.Add(AuditEntity.Id().Eq(1))
.GetResultList();
এখানে:
- CreateQuery(): এটি সমস্ত Employee এন্টিটির ইতিহাস ট্র্যাক করে।
- ForRevisionsOfEntity(false): এটি সংশোধন ইতিহাস খুঁজে বের করে।
- Add(AuditEntity.Id().Eq(1)): এটি শুধুমাত্র
EmployeeId 1 এর ইতিহাস নির্বাচন করে।
Manual Audit Tracking
কখনও কখনও, আপনি কাস্টম audit tracking চাইতে পারেন, যেখানে আপনি নিজেই পরিবর্তন বা ইনসার্টের সময় মেটাডেটা (যেমন: ব্যবহারকারীর আইডি, টাইমস্ট্যাম্প, এবং পরিবর্তন সম্পর্কিত বিস্তারিত) ট্র্যাক করবেন।
Manual Audit Implementation:
এখানে আমরা Employee টেবিলের জন্য একটি কাস্টম audit টেবিল তৈরি করব:
public class EmployeeAudit
{
public virtual int Id { get; set; }
public virtual int EmployeeId { get; set; }
public virtual string Action { get; set; } // INSERT, UPDATE, DELETE
public virtual string ChangedBy { get; set; }
public virtual DateTime ChangeDate { get; set; }
}
public class EmployeeAuditMap : ClassMap<EmployeeAudit>
{
public EmployeeAuditMap()
{
Table("EmployeeAudits");
Id(x => x.Id).GeneratedBy.Identity();
Map(x => x.EmployeeId);
Map(x => x.Action);
Map(x => x.ChangedBy);
Map(x => x.ChangeDate);
}
}
এখানে:
- EmployeeAudit টেবিলটি ডেটাবেসের একটি Audit Log রাখবে যা রেকর্ডের পরিবর্তনগুলির মেটাডেটা সংরক্ষণ করবে।
কাস্টম ট্রানজেকশন এডিটিং:
public void AuditEmployeeChange(Employee employee, string action, string user)
{
var employeeAudit = new EmployeeAudit
{
EmployeeId = employee.Id,
Action = action,
ChangedBy = user,
ChangeDate = DateTime.Now
};
using (var session = sessionFactory.OpenSession())
{
using (var transaction = session.BeginTransaction())
{
session.Save(employeeAudit); // Save the audit log
transaction.Commit();
}
}
}
এখানে:
- যখন Employee রেকর্ডে পরিবর্তন করা হয়, তখন AuditEmployeeChange() মেথড ব্যবহার করে সেই পরিবর্তনটি
EmployeeAuditটেবিলে সংরক্ষণ করা হয়।
সারাংশ
Entity History এবং Audit Tracking অত্যন্ত গুরুত্বপূর্ণ ফিচার, যা ডেটাবেসের পরিবর্তনের ইতিহাস এবং তা পরিচালনার প্রক্রিয়াকে সহজ করে। NHibernate Envers ব্যবহার করে আপনি সহজেই Entity History ট্র্যাক করতে পারেন, অথবা Manual Audit পদ্ধতি ব্যবহার করে কাস্টম ট্র্যাকিং সিস্টেম তৈরি করতে পারেন। এগুলি অ্যাপ্লিকেশন ডেটার নিরাপত্তা, সঠিকতা, এবং আইনগত ট্র্যাকিং নিশ্চিত করার জন্য অপরিহার্য।
Read more